import {
  Album,
  Artist,
  MusicInfo,
  MVInfo,
  SongListInfo,
  UserInfo,
} from "./music-info.model";
import { DJRadioInfo, VideoInfo } from "./other.model";
import { SearchAllResponse } from "./search-all.model";

export enum SearchType {
  //   1: 单曲, 10: 专辑, 100: 歌手, 1000:
  // 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频, 1018:综合
  /**
   * 1: 单曲
   */
  Music = 1,
  /**
   * 10: 专辑
   */
  Album = 10,
  /**
   * 100: 歌手
   */
  Artist = 100,
  /**
   * 1000: 歌单
   */
  MusicList = 1000,
  /**
   * 1002: 用户
   */
  User = 1002,
  /**
   *  1004: MV
   */
  MV = 1004,
  /**
   * 1006: 歌词
   */
  Lyric = 1006,
  /**
   * 1009: 电台
   */
  Radio = 1009,
  /**
   * 1014: 视频
   */
  Video = 1014,
  /**
   * 1018: 综合
   */
  All = 1019,
}

/**
 * 搜索出来的歌曲信息返回结构
 */
export interface SearchMusicResponse {
  code?: number;
  result: {
    /**
     * 是否有更多
     */
    hasMore?: boolean;
    /**
     * 歌曲数量
     */
    songCount: number;
    /**
     * 歌曲列表
     */
    songs: MusicInfo[];
  };
}

/**
 * 搜索专辑返回的信息
 */
export interface SearchAlbumResponse {
  code?: number;
  result: {
    albumCount: number;
    albums: Album[];
  };
}

/**
 * 搜索歌手返回的信息
 */
export interface SearchArtistResponse {
  code?: number;
  result: {
    artistCount: number;
    artists: Artist[];
    hasMore: boolean;
  };
}

/**
 * 搜索歌单返回的信息
 */
export interface SearchPlayListResponse {
  code?: number;
  result: {
    hasMore: boolean;
    playlistCount: number;
    playlists: SongListInfo[];
  };
}

/**
 * 搜索用户返回的信息
 */
export interface SearchUserResponse {
  code?: number;
  result: {
    hasMore: boolean;
    userprofileCount: number;
    userprofiles: UserInfo[];
  };
}

/**
 * 搜索MV返回的信息
 */
export interface SearchMVResponse {
  code?: number;
  result: {
    mvCount: number;
    mvs: MVInfo[];
  };
}

/**
 * 搜索歌词返回的是歌曲信息
 */
export type SearchLyricResponse = SearchMusicResponse;

/**
 * 搜索电台返回的信息
 */
export interface SearchRadioResponse {
  code?: number;
  result: {
    djRadios: DJRadioInfo[];
    djRadiosCount: number;
  };
}

/**
 * 搜索视频返回的信息
 */
export interface SearchVideoResponse {
  code?: number;
  result: {
    hasMore: boolean;
    videoCount: number;
    videos: VideoInfo[];
  };
}

/**
 * 搜索类型映射
 */
export interface SearchTypeMap {
  /**
   * 1: 单曲
   */
  Music: SearchMusicResponse;
  /**
   * 10: 专辑
   */
  Album: SearchAlbumResponse;
  /**
   * 100: 歌手
   */
  Artist: SearchArtistResponse;
  /**
   * 1000: 歌单
   */
  MusicList: SearchPlayListResponse;
  /**
   * 1002: 用户
   */
  User: SearchUserResponse;
  /**
   *  1004: MV
   */
  MV: SearchMVResponse;
  /**
   * 1006: 歌词
   */
  Lyric: SearchLyricResponse;
  /**
   * 1009: 电台
   */
  Radio: SearchRadioResponse;
  /**
   * 1014: 视频
   */
  Video: SearchVideoResponse;
  /**
   * 1018: 综合
   */
  All: SearchAllResponse;
}

/**
 * TypeScript 类型语法，输入一个类型返回对应的类型
 */
export type SearchResponseType<
  T extends keyof SearchTypeMap
> = SearchTypeMap[T];
